package com.ruoyi.celoan.service.impl;

import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.celoan.entity.DalianDataReportKeyEntity;
import com.ruoyi.celoan.entity.ExtradeEffectLoginLogEntity;
import com.ruoyi.celoan.handanUtils.HanDanHttpUtils;
import com.ruoyi.celoan.handanUtils.response.CountryPlatformResponse;
import com.ruoyi.celoan.mapper.ExtradeEffectLoginLogMapper;
import com.ruoyi.celoan.service.ExtradeEffectLoginLogService;
import com.ruoyi.celoan.service.IEcDalianDataReportLogsService;
import com.ruoyi.celoan.util.ListUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class ExtradeEffectLoginLogServiceImpl extends ServiceImpl<ExtradeEffectLoginLogMapper, ExtradeEffectLoginLogEntity> implements ExtradeEffectLoginLogService {
    private static final Logger log = LoggerFactory.getLogger(ExtradeEffectLoginLogServiceImpl.class);

    @Autowired
    private IEcDalianDataReportLogsService dalianDataReportLogsService;


    private final String url = "/api/upload/logPlatformLogin";


    @Override
    public void getHanDanDataReport(String interfaceName, DalianDataReportKeyEntity entity, String areaCode, String token) {
        String startDate = LocalDateTime.now().plusDays(-2L).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        QueryWrapper<ExtradeEffectLoginLogEntity> queryWrapper = new QueryWrapper();
        queryWrapper.eq("isflag", Integer.valueOf(0));
        log.info("开始时间：" + startDate);

        List<ExtradeEffectLoginLogEntity> list = this.baseMapper.selectLoginLogList();
        if (list.size() > 0) {
            this.saveBatch(list);
        }
//        List<ExtradeEffectLoginLogEntity> list = ((ExtradeEffectLoginLogMapper) this.baseMapper).selectList((Wrapper) queryWrapper);
        if (CollUtil.isNotEmpty(list)) {
            List<List<ExtradeEffectLoginLogEntity>> retList = ListUtils.splitList(list, 40);
            this.dalianDataReportLogsService.addLogs(interfaceName + "接口上报数据开始", list.size() + "条");
            String date = LocalDate.now().toString();
            List<Long> updateList = new ArrayList<>();
            for (int i = 0; i < retList.size(); i++) {
                try {
                    List<ExtradeEffectLoginLogEntity> reportList = retList.get(i);
                    List<Long> addlist = (List<Long>) reportList.stream().map(ret -> ret.getId()).collect(Collectors.toList());
                    log.info("上报信息:" + JSONObject.toJSONString(reportList));
                    this.dalianDataReportLogsService.addLogs(interfaceName + "明细日期:" + date + "上报id为：", JSONObject.toJSONString(addlist));
                    CountryPlatformResponse response = HanDanHttpUtils.uploadLoginLogs(this.url, JSONObject.toJSONString(reportList), token);
                    this.dalianDataReportLogsService.addLogs(interfaceName + "明细返回结果:", JSONObject.toJSONString(response));
                    if (response.isApiStatus()) {
                        updateList.addAll(addlist);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    log.info("数据上报异常:" + e.getMessage());
                    this.dalianDataReportLogsService.addLogs(interfaceName + "上报数据上报错误:", e.getMessage());
                }
            }
            if (CollUtil.isNotEmpty(updateList)) {
                UpdateWrapper<ExtradeEffectLoginLogEntity> updateWrapper = new UpdateWrapper();
                updateWrapper.in("id", updateList);
                updateWrapper.set("isflag", Integer.valueOf(1));
                update((Wrapper) updateWrapper);
                this.dalianDataReportLogsService.addLogs(interfaceName + "上报数据上报成功条数:", updateList.size() + "条");
            }
        }
    }
}
